Amazon DocumentDB (MongoDB 互換) を使ってみた
こんにちは、yagiです。
先日、AWS re:Invent 2022のEXPOでブースに立ち寄らせていただいた MongoDB さん(ダブリン、アイルランドリージョンの方)とお話しさせていただく機会がありました。
EXPOでもデモ交えて色々と教えていただき、良い機会なので、本日は以下のチュートリアルで使ってみます。
ドキュメントデータベースのセットアップ Amazon DocumentDB (MongoDB 互換) と AWS Cloud9
Amazon DocumentDB (MongoDB 互換) とは
高速でスケーラブルかつ高可用性の完全マネージド型ドキュメントデータベースサービスです。MongoDB のワークロードをサポートし、JSON データの保存、クエリ、インデックス作成を容易にします。
このチュートリアルでは、AWS Cloud9 を使用して Amazon DocumentDB を使用する方法を示します。mongo シェルを使用して AWS Cloud9 環境から Amazon DocumentDB クラスターに接続し、クエリをいくつか実行する方法を学びます。
次の図は、このチュートリアルの最終的なアーキテクチャを示しています。
AWS VPC 内でAWS Cloud9 からmongo shell を利用して、同じVPC内で、Amazon DocumentDBクラスターへアクセスする構成となっています。
AWSから利用する上では、Atlas(MongoDBのマネージド版)を利用する場合もVPCピアリングに対応しており、既にインターネット経由する必要はなくなっていますが、こちらのチュートリアルでは、Amazon DocumentDB (MongoDB 互換) を利用することで、VPCピアリングをしなくても同一VPC内で完結する構成となっています。
使ってみた
AWS Cloud9 環境作成
AWS Cloud9 コンソールから「Create environment」を押下します。
チュートリアルの内容に従って入力し、環境を作成します。
セキュリティグループ作成
セキュリティグループを作成します。インバウンドルールの追加から、タイプ「カスタムTCP」、ポート範囲「27017」を入力し、ソースにカスタムで「Cloud9」で検索してセキュリティーグループを指定します。
Amazon DocumentDB クラスターの作成
Amazon DocumentDB クラスターを作成します。
mongo シェルのインストール
Cloud9 に戻りIDEを開きます。
リポジトリファイルの作成とMongoシェルのインストールを実施します。
$ echo -e "[mongodb-org-3.6] nname=MongoDB Repositorynbaseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.6/x86_64/ngpgcheck=1 nenabled=1 ngpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc" | sudo tee /etc/yum.repos.d/mongodb-org-3.6.repo [mongodb-org-3.6] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.6/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc $ sudo yum install -y mongodb-org-shell Loaded plugins: extras_suggestions, langpacks, priorities, update-motd mongodb-org-3.6 | 2.5 kB 00:00:00 mongodb-org-3.6/primary_db | 119 kB 00:00:00 240 packages excluded due to repository priority protections ``` Installed: mongodb-org-shell.x86_64 0:3.6.23-1.amzn1 Complete!
Amazon DocumentDB クラスターに接続する
Amazon DocumentDB クラスターから、「mongo シェルでこのクラスターに接続する」 接続文字列をコピーして、 の箇所を省略した状態でCloud9 のIDEで実行します。
データの挿入とクエリ
チュートリアルに従っていくつかサンプルクエリを試します。
プロファイルというタイトルのコレクションに4つのエントリを挿入します。
rs0:PRIMARY> db.profiles.insertMany([ ... ... { "_id" : 1, "name" : "Tim", "status": "active", "level": 12, "score":202}, ... ... { "_id" : 2, "name" : "Justin", "status": "inactive", "level": 2, "score":9}, ... ... { "_id" : 3, "name" : "Beth", "status": "active", "level": 7, "score":87}, ... ... { "_id" : 4, "name" : "Jesse", "status": "active", "level": 3, "score":27} ... ... ]) { "acknowledged" : true, "insertedIds" : [ 1, 2, 3, 4 ] }
find() コマンドを使用して、プロファイルコレクション内のすべてのドキュメントを返します。
s0:PRIMARY> db.profiles.find() { "_id" : 1, "name" : "Tim", "status" : "active", "level" : 12, "score" : 202 } { "_id" : 2, "name" : "Justin", "status" : "inactive", "level" : 2, "score" : 9 } { "_id" : 3, "name" : "Beth", "status" : "active", "level" : 7, "score" : 87 } { "_id" : 4, "name" : "Jesse", "status" : "active", "level" : 3, "score" : 27 }
フィルターを使用して 1 つのドキュメントのクエリを使用します。
rs0:PRIMARY> db.profiles.find({name: "Jesse"}) { "_id" : 4, "name" : "Jesse", "status" : "active", "level" : 3, "score" : 27 }
findAndModify コマンドを使用し、Tim にスコアのクレジット+10を付与します。
rs0:PRIMARY> db.profiles.findAndModify({ ... ... query: { name: "Tim", status: "active"}, ... ... update: { $inc: { score: 10 } } ... ... }) { "_id" : 1, "name" : "Tim", "status" : "active", "level" : 12, "score" : 202 }
更新結果を確認します。
rs0:PRIMARY> db.profiles.find({name: "Tim"}) { "_id" : 1, "name" : "Tim", "status" : "active", "level" : 12, "score" : 212 }
感想
Amazon DocumentDB (MongoDB 互換)をCloud9からmongo shell を利用してアクセスするチュートリアルを実施してみました。 mongo shellをcloud9のIDE上からインストールすれば利用が開始できますし、同一VPCでアクセスできるシンプルな構成が可能となっています。 クエリもシンプルで柔軟性があり、また既存のMongoDBからAWSへの移行についてもDMSでサポートされていますので、その辺も色々と活用できるかと思います。